Skip to content

feat: add built-in Kanban board to web UI#42

Closed
chetan-guevara wants to merge 1 commit intomoazbuilds:masterfrom
chetan-guevara:feat/kanban-board
Closed

feat: add built-in Kanban board to web UI#42
chetan-guevara wants to merge 1 commit intomoazbuilds:masterfrom
chetan-guevara:feat/kanban-board

Conversation

@chetan-guevara
Copy link
Copy Markdown
Contributor

Summary

Adds a built-in Kanban board as a native tab in the ClaudeClaw web UI — no external server, no iframe, no configuration required. Task state is persisted to .claude/claudeclaw/kanban.json alongside existing ClaudeClaw data.

Features

  • Three columns: To Do → In Progress → Done
  • Add tasks via a modal (+ Add task button)
  • Clear done column with one click
  • Auto-refresh every 10 seconds
  • Agent auto-tracking (when used with the agent lifecycle PR feat: surface sub-agent lifecycle events in chat #41): sub-agent spawns automatically add a card to In Progress; completions move it to Done
  • Fully consistent with the existing ClaudeClaw UI aesthetic

Architecture

New service: src/ui/services/kanban.ts

Handles all reads/writes to .claude/claudeclaw/kanban.json:

  • readKanban() — reads the board, initialises missing columns gracefully
  • writeKanban(board) — persists to disk
  • addCardToColumn(column, card) — atomic add
  • moveCard(id, toColumn, patch?) — atomic move across columns

New API endpoints in server.ts

  • GET /api/kanban — returns the full board JSON
  • POST /api/kanban — writes the full board JSON

Board data schema

{
  "columns": {
    "todo": [],
    "in_progress": [],
    "done": []
  }
}

Each card:

{
  id: string;
  title: string;
  description?: string;
  started_at?: string;
  completed_at?: string;
  agent_type?: string;
}

Note on agent auto-tracking

The kanban service is self-contained and works standalone. When combined with PR #41 (agent lifecycle tracking), the server.ts chat endpoint can call addCardToColumn / moveCard to automatically track sub-agent activity — but this PR does not depend on #41 and can be merged independently.

Test plan

  • Open http://127.0.0.1:4632, click the Kanban tab
  • Click + Add task, fill in title and description → card appears in To Do
  • Reload page → board state is restored from kanban.json
  • Click Clear on Done column → done cards removed
  • Verify .claude/claudeclaw/kanban.json is written correctly after each action
  • Verify Dashboard tab still works normally

Adds a three-column Kanban board (To Do / In Progress / Done) directly
into the ClaudeClaw web UI with no external server, iframe, or hardcoded
localhost URLs. Board state persists to .claude/claudeclaw/kanban.json
via new GET/POST /api/kanban endpoints. Includes tab navigation between
Dashboard and Kanban views, an add-task modal, clear-done action, and
10-second polling for live agent-driven updates.
Fenrur added a commit to Fenrur/claudeclaw that referenced this pull request Mar 17, 2026
- Kanban board with Todo/In Progress/Done columns
- Persistent storage via /api/kanban endpoints
- Task creation modal, drag-and-drop ready
- Integrated as third tab alongside Dashboard and Chat

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@TerrysPOV TerrysPOV self-assigned this Apr 22, 2026
Copy link
Copy Markdown
Collaborator

@TerrysPOV TerrysPOV left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a useful addition, but I still see a blocking correctness issue before merge:

  1. The current Kanban persistence flow is unsafe for concurrent updates. POST /api/kanban blindly overwrites the entire board with whatever JSON the browser sends, and the browser is posting a stale in-memory snapshot of kanbanData. With polling, multiple tabs, or agent-driven updates, it is very easy to lose changes through last-write-wins clobbering. This needs narrower mutation endpoints or some kind of version / merge protection rather than whole-board replacement.

  2. I also checked the linked commit 01bb65d that was referenced as part of this work. That exact commit is not present in the PR branch history, although parts of its changes may have been reworked into the branch. If that commit is intended to address earlier integration concerns, please make that explicit in this PR branch by either rebasing/cherry-picking the missing pieces clearly or pointing to the exact diff/lines here that preserve the intended behavior.

I’d suggest:

  • replace whole-board POST /api/kanban writes with narrower operations such as add task, move card, clear done, etc., or add versioned/merge-safe writes
  • make sure the intended UI integration changes from the linked work are clearly present in this PR branch, not just in an external commit reference
  • add automated coverage for:
    • board initialization when kanban.json is missing or corrupt
    • add task persistence
    • clear-done behaviour
    • concurrent update safety / no lost writes after refresh or polling

I was able to run bunx tsc --noEmit successfully in the PR worktree after installing local deps, but I didn’t find automated tests covering this Kanban persistence path. Please consider adding these in.

@TerrysPOV
Copy link
Copy Markdown
Collaborator

Hey @chetan-guevara — this is a great feature. We've decided it's a better fit for ClaudeClaw+ (our sister repo for heavier web UI features) where it pairs with the agent lifecycle events tab that's already there.

Ported to TerrysPOV/ClaudeClaw-Plus#10. Your contribution is fully credited in the port — thank you for the clean architecture and the integration hook with PR #41.

Closing this on the upstream side.

@TerrysPOV TerrysPOV closed this May 2, 2026
TerrysPOV added a commit to TerrysPOV/ClaudeClaw-Plus that referenced this pull request May 3, 2026
Three-column board (To Do / In Progress / Done) as a native tab in
the ClaudeClaw+ web UI. State persists to .claude/claudeclaw/kanban.json.
Auto-refreshes every 10 seconds. Integrates with the existing
Dashboard/Chat tab system.

Exposes /api/kanban GET+POST endpoints backed by src/ui/services/kanban.ts
(readKanban, writeKanban, addCardToColumn, moveCard helpers). The Kanban
service is standalone but designed to pair with the agent lifecycle events
tab (PR #41) already in ClaudeClaw-Plus for auto-tracking sub-agent activity.

Ported from moazbuilds/claudeclaw#42.
Co-authored-by: Chetan Nandakumar <chetan-guevara@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants